package com.cleaningcloud.cld.mapper;

import java.util.List;
import java.util.Map;

import com.cleaningcloud.cld.domain.CldPayConfirm;
import com.cleaningcloud.cld.domain.CldPayDetails;
import com.cleaningcloud.cld.domain.dto.CldPayDetailsDto;
import com.cleaningcloud.cld.domain.excelExport.SalaryExcelExport;
import org.apache.ibatis.annotations.Param;

/**
 * 薪酬管理Mapper接口
 * 
 * @author cleaningcloud
 * @date 2024-11-08
 */
public interface CldPayDetailsMapper 
{
    /**
     * 查询薪酬管理
     * 
     * @param payDetailsId 薪酬管理主键
     * @return 薪酬管理
     */
    CldPayDetails selectCldPayDetailsByPayDetailsId(Long payDetailsId);

    /**
     * 查询薪酬管理列表
     * 
     * @param cldPayDetails 薪酬管理
     * @return 薪酬管理集合
     */
    List<CldPayDetails> selectCldPayDetailsList(CldPayDetails cldPayDetails);


    /**
     * 导出
     *
     * @param salaryExcelExport
     * @return 薪酬管理集合
     */
    List<SalaryExcelExport> selectSalaryExcelExport(SalaryExcelExport salaryExcelExport);


    /**
     * 新增薪酬管理
     * 
     * @param cldPayDetails 薪酬管理
     * @return 结果
     */
    int insertCldPayDetails(CldPayDetails cldPayDetails);

    /**
     * 修改薪酬管理
     * 
     * @param cldPayDetails 薪酬管理
     * @return 结果
     */
    int updateCldPayDetails(CldPayDetails cldPayDetails);

    /**
     * 删除薪酬管理
     * 
     * @param payDetailsId 薪酬管理主键
     * @return 结果
     */
    int deleteCldPayDetailsByPayDetailsId(Long payDetailsId);

    /**
     * 批量删除薪酬管理
     * 
     * @param payDetailsIds 需要删除的数据主键集合
     * @return 结果
     */
    int deleteCldPayDetailsByPayDetailsIds(Long[] payDetailsIds);


    /**
     * 实时薪酬列表
     * @param cldPayDetailsDto
     * @return
     */

    List<Map<String,Object>> selectRealTimeSalaryGrouping(CldPayDetailsDto cldPayDetailsDto);

    /**
     * 根据业务id查询
     * @param businessId
     * @return
     */
    CldPayDetails selectCldPayDetailsByBusinessId(@Param("businessId") Long businessId);


    /**
     * 累计薪酬列表
     * @param cldPayDetailsDto
     * @return
     */
    List<Map<String,Object>> getCumulativeSalaryList(CldPayDetailsDto cldPayDetailsDto);


    /**
     * 累计薪酬列表 - 按项目查看
     * @param cldPayConfirm
     * @return
     */
    List<Map<String,Object>> getCumulativeSalaryByProjectId(CldPayConfirm cldPayConfirm);


    /**
     * 工资统计
     * @param cldPayDetailsDto
     * @return
     */
    List<Map<String,Object>> selectSalaryStatistics(CldPayDetailsDto cldPayDetailsDto);


    /**
     * 薪资统计 - 头部
     *
     * @return
     */
    Map<String, Object> salaryHeadStatistics();

    /**
     * 根据业务id查询
     * @param cldPayDetails
     * @return
     */
    List<CldPayDetails> getCldPayDetailsList(CldPayDetails cldPayDetails);

}
